I started out by downloading all the advanced passing data from https://stats.nba.com/teams/passing/. Unfortunately this only goes back 6 years, so I am going to have to look at assist data as well. The NBA has been counting assists since the 1940s, but these data are much more subjective. Whether a pass leads to a basket is entirely up to the scorekeepers’ judgement, and there have been some famously questionable assists:
| W (mean (SD)) | Passes.Made (mean (SD)) | Passes.Received (mean (SD)) | Ast (mean (SD)) | Secondary.Ast (mean (SD)) | Potential.Ast (mean (SD)) | Ast.Pts.Created (mean (SD)) | |
|---|---|---|---|---|---|---|---|
| ATL | 40.33 (13.06) | 25963.33 (828.32) | 25963.00 (828.98) | 2034.00 (88.84) | 263.00 (46.35) | 3998.33 (184.07) | 5059.67 (245.15) |
| BOS | 44.33 (10.54) | 25005.83 (981.29) | 25004.50 (981.30) | 1947.00 (167.38) | 246.33 (45.57) | 3896.17 (303.58) | 4834.83 (440.41) |
| CHA | 39.00 (5.37) | 24308.33 (1027.09) | 24306.83 (1028.23) | 1793.83 (92.74) | 257.17 (18.32) | 3647.67 (214.68) | 4507.00 (334.11) |
| CHI | 38.33 (11.36) | 24836.17 (987.02) | 24835.17 (987.50) | 1843.83 (55.76) | 224.00 (51.56) | 3722.50 (313.23) | 4548.50 (159.57) |
| CLE | 43.83 (14.70) | 23392.50 (816.93) | 23347.67 (828.94) | 1811.50 (82.46) | 243.83 (48.50) | 3528.17 (188.56) | 4593.17 (305.88) |
| DAL | 38.33 (10.37) | 25387.33 (996.13) | 25386.67 (996.23) | 1841.00 (92.83) | 251.00 (29.43) | 3754.33 (187.15) | 4650.33 (185.40) |
| DEN | 39.67 (8.91) | 23590.33 (1685.63) | 23544.83 (1623.96) | 1971.33 (174.08) | 237.67 (36.22) | 3856.33 (131.71) | 4890.67 (371.33) |
| DET | 37.00 (5.62) | 22949.50 (1586.45) | 22948.83 (1586.68) | 1754.00 (99.25) | 206.67 (28.30) | 3573.67 (88.08) | 4366.67 (233.98) |
| GSW | 62.00 (8.44) | 25030.17 (2637.65) | 24979.00 (2612.71) | 2302.83 (217.14) | 320.83 (60.24) | 4215.83 (341.99) | 5657.83 (544.78) |
| HOU | 53.83 (7.65) | 22465.33 (1730.14) | 22464.67 (1730.19) | 1824.83 (123.50) | 210.67 (19.96) | 3718.50 (282.24) | 4679.83 (328.04) |
| IND | 46.17 (6.15) | 24636.50 (809.49) | 24635.50 (809.00) | 1819.00 (163.48) | 236.83 (37.58) | 3756.17 (174.23) | 4469.00 (346.21) |
| LAC | 51.17 (5.56) | 24422.33 (533.12) | 24421.00 (533.05) | 1928.33 (88.04) | 265.67 (52.30) | 3644.17 (325.91) | 4771.83 (239.16) |
| LAL | 27.17 (7.76) | 23217.50 (1067.20) | 23215.67 (1067.21) | 1826.67 (230.63) | 202.17 (52.30) | 3658.17 (323.47) | 4481.17 (535.18) |
| MEM | 40.83 (11.89) | 25676.17 (859.20) | 25675.17 (858.84) | 1790.00 (90.99) | 275.67 (29.46) | 3704.17 (123.62) | 4371.50 (236.01) |
| MIA | 43.50 (6.53) | 24276.33 (577.63) | 24275.00 (577.92) | 1789.17 (135.82) | 240.00 (42.55) | 3713.17 (124.13) | 4486.17 (343.32) |
| MIL | 39.00 (14.75) | 23836.33 (1058.14) | 23835.33 (1058.56) | 1924.00 (131.88) | 243.17 (16.87) | 3747.00 (163.20) | 4715.00 (388.58) |
| MIN | 33.17 (10.61) | 23528.50 (801.05) | 23527.50 (801.32) | 1907.83 (93.49) | 225.33 (21.48) | 3783.83 (305.62) | 4670.67 (270.69) |
| NJN | 31.83 (10.46) | 24456.67 (1381.55) | 24456.17 (1381.91) | 1802.00 (110.69) | 216.50 (13.98) | 3713.83 (94.45) | 4537.67 (272.43) |
| NOH | 37.33 (7.31) | 23897.83 (1382.52) | 23896.17 (1381.58) | 1941.50 (208.37) | 189.83 (45.18) | 3700.67 (179.94) | 4773.17 (433.64) |
| NYK | 27.00 (8.27) | 26131.33 (2455.30) | 26130.33 (2455.82) | 1725.83 (99.01) | 222.83 (18.38) | 3676.17 (264.09) | 4259.17 (173.54) |
| OKC | 50.33 (5.43) | 20943.67 (903.51) | 20942.17 (903.51) | 1781.67 (91.78) | 173.83 (14.19) | 3633.50 (144.54) | 4400.83 (221.17) |
| ORL | 29.50 (6.69) | 23672.67 (807.24) | 23671.83 (807.11) | 1853.00 (134.81) | 225.33 (28.70) | 3847.17 (182.96) | 4532.17 (342.47) |
| PHI | 29.67 (17.85) | 26818.17 (1494.89) | 26817.17 (1493.63) | 1928.00 (220.61) | 224.33 (48.27) | 3976.83 (162.87) | 4828.33 (500.07) |
| PHO | 28.83 (11.81) | 24133.50 (986.88) | 24131.83 (987.50) | 1699.00 (144.90) | 190.33 (27.17) | 3614.33 (153.85) | 4237.67 (277.96) |
| POR | 48.67 (5.16) | 23165.67 (690.48) | 23122.33 (703.77) | 1778.33 (112.40) | 227.50 (39.43) | 3650.50 (254.89) | 4462.33 (285.40) |
| SAC | 31.33 (4.41) | 23959.00 (1732.21) | 23957.50 (1730.95) | 1812.50 (205.31) | 197.00 (44.14) | 3622.50 (282.87) | 4441.00 (515.66) |
| SAS | 56.67 (8.07) | 26086.83 (1758.87) | 26086.50 (1758.34) | 1982.33 (68.76) | 312.83 (37.49) | 3696.83 (250.39) | 4846.33 (196.89) |
| TOR | 53.00 (5.02) | 23736.67 (1098.70) | 23736.33 (1098.86) | 1752.17 (242.45) | 238.67 (51.63) | 3465.17 (292.53) | 4403.67 (546.03) |
| UTA | 42.00 (9.90) | 27011.67 (1887.76) | 27011.33 (1888.15) | 1742.67 (205.47) | 232.33 (38.22) | 3710.17 (183.16) | 4424.67 (482.74) |
| WAS | 42.33 (6.19) | 23963.50 (1245.55) | 23963.00 (1245.80) | 2003.17 (84.49) | 249.67 (24.30) | 3920.17 (101.43) | 4929.17 (217.83) |
| FG (mean (SD)) | FGA (mean (SD)) | FG% (mean (SD)) | 3P (mean (SD)) | 3PA (mean (SD)) | 3P% (mean (SD)) | AST (mean (SD)) | STL (mean (SD)) | BLK (mean (SD)) | TOV (mean (SD)) | PF (mean (SD)) | PTS (mean (SD)) | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ATL | 3070.30 (508.37) | 6924.80 (825.48) | 0.44 (0.04) | 383.27 (277.66) | 1105.15 (751.77) | 0.32 (0.06) | 1791.01 (257.26) | 680.74 (106.48) | 411.63 (92.27) | 1313.61 (195.71) | 1903.14 (272.77) | 8103.49 (1151.76) |
| BOS | 3153.38 (608.61) | 7101.68 (1075.32) | 0.44 (0.05) | 399.20 (271.42) | 1137.72 (742.89) | 0.34 (0.04) | 1858.07 (363.49) | 663.37 (96.13) | 383.72 (86.66) | 1315.76 (199.10) | 1857.21 (230.01) | 8201.21 (1391.84) |
| CHA | 2995.52 (370.57) | 6636.59 (720.03) | 0.45 (0.02) | 441.14 (223.21) | 1243.03 (604.26) | 0.35 (0.03) | 1852.59 (260.47) | 628.17 (103.64) | 384.03 (69.48) | 1158.83 (132.75) | 1679.17 (224.48) | 7980.97 (908.58) |
| CHI | 3193.53 (359.70) | 6984.83 (674.12) | 0.46 (0.03) | 343.52 (224.55) | 979.55 (597.14) | 0.33 (0.06) | 1917.64 (224.34) | 646.98 (88.55) | 394.70 (67.34) | 1317.35 (223.50) | 1838.13 (235.89) | 8265.28 (845.09) |
| CLE | 3148.37 (371.90) | 6895.78 (743.35) | 0.46 (0.02) | 384.43 (274.12) | 1072.00 (724.17) | 0.34 (0.05) | 1869.02 (230.22) | 624.85 (71.69) | 397.54 (96.56) | 1253.98 (166.16) | 1802.61 (233.79) | 8156.14 (800.95) |
| DAL | 3146.67 (331.30) | 6847.77 (599.29) | 0.46 (0.02) | 438.54 (264.72) | 1240.97 (721.38) | 0.34 (0.04) | 1813.82 (240.33) | 603.08 (69.70) | 380.74 (63.30) | 1157.33 (155.53) | 1754.49 (220.89) | 8292.36 (829.51) |
| DEN | 3350.88 (445.17) | 7258.87 (816.21) | 0.46 (0.02) | 321.04 (257.35) | 953.02 (694.43) | 0.31 (0.05) | 1937.83 (321.36) | 700.07 (121.94) | 444.20 (86.30) | 1348.12 (215.97) | 1937.63 (230.95) | 8788.00 (1019.78) |
| DET | 3079.06 (554.17) | 6984.46 (931.05) | 0.44 (0.04) | 361.45 (248.32) | 1040.80 (676.36) | 0.32 (0.05) | 1727.14 (263.49) | 637.85 (109.30) | 398.85 (92.83) | 1275.00 (253.42) | 1875.13 (235.02) | 8052.79 (1203.94) |
| GSW | 3167.40 (620.72) | 7169.23 (956.50) | 0.44 (0.05) | 433.45 (307.14) | 1206.53 (762.44) | 0.33 (0.05) | 1812.63 (372.26) | 718.59 (110.57) | 414.87 (85.99) | 1346.61 (187.43) | 1865.42 (242.60) | 8247.95 (1458.68) |
| HOU | 3253.38 (386.19) | 7059.29 (807.72) | 0.46 (0.02) | 492.02 (340.98) | 1403.00 (927.60) | 0.33 (0.05) | 1902.98 (249.57) | 657.09 (87.32) | 417.80 (83.66) | 1339.15 (194.01) | 1824.08 (240.41) | 8506.37 (825.36) |
| IND | 3223.40 (393.49) | 6993.12 (775.67) | 0.46 (0.02) | 350.96 (220.67) | 1006.84 (577.89) | 0.33 (0.05) | 1861.29 (261.47) | 666.72 (120.84) | 409.09 (56.90) | 1336.31 (191.35) | 1904.77 (213.42) | 8458.69 (843.27) |
| LAC | 3208.82 (359.26) | 6934.73 (644.54) | 0.46 (0.02) | 352.70 (251.46) | 1028.85 (657.17) | 0.32 (0.05) | 1853.57 (254.84) | 660.80 (103.79) | 429.65 (76.23) | 1361.74 (223.67) | 1870.49 (206.59) | 8308.71 (788.21) |
| LAL | 3216.93 (533.64) | 7047.69 (793.17) | 0.45 (0.04) | 397.15 (246.51) | 1156.28 (682.82) | 0.32 (0.06) | 1894.76 (355.05) | 677.61 (101.86) | 447.33 (75.05) | 1296.63 (224.79) | 1810.45 (195.92) | 8390.32 (1179.95) |
| MEM | 2895.67 (316.54) | 6451.50 (641.86) | 0.45 (0.01) | 450.33 (163.52) | 1296.00 (455.67) | 0.35 (0.02) | 1693.38 (223.97) | 643.38 (80.76) | 399.17 (74.17) | 1200.62 (134.35) | 1706.79 (187.20) | 7689.17 (838.67) |
| MIA | 2967.87 (328.95) | 6470.29 (682.35) | 0.46 (0.02) | 480.10 (204.58) | 1350.90 (553.07) | 0.35 (0.02) | 1712.74 (196.02) | 614.26 (83.18) | 405.58 (62.19) | 1220.26 (178.49) | 1781.77 (245.45) | 7871.10 (818.69) |
| MIL | 3282.69 (394.62) | 6995.51 (680.19) | 0.47 (0.02) | 379.15 (231.44) | 1073.97 (626.92) | 0.34 (0.04) | 1951.35 (255.74) | 691.72 (113.10) | 395.41 (80.45) | 1299.78 (201.87) | 1894.73 (222.97) | 8428.78 (834.30) |
| MIN | 3031.57 (299.49) | 6672.40 (584.98) | 0.45 (0.01) | 372.40 (176.86) | 1089.30 (487.60) | 0.34 (0.03) | 1847.57 (214.75) | 610.83 (84.94) | 399.00 (72.78) | 1179.90 (162.74) | 1750.90 (214.04) | 7954.87 (786.83) |
| NJN | 3176.40 (392.90) | 7021.29 (677.42) | 0.45 (0.02) | 315.14 (264.01) | 938.63 (725.54) | 0.31 (0.05) | 1805.94 (246.07) | 692.00 (128.76) | 435.07 (106.66) | 1378.54 (244.99) | 1930.40 (266.14) | 8295.40 (824.54) |
| NOH | 3018.29 (295.93) | 6682.35 (514.43) | 0.45 (0.02) | 548.29 (169.20) | 1540.82 (471.74) | 0.36 (0.02) | 1762.00 (211.53) | 604.24 (58.66) | 384.47 (75.17) | 1125.94 (81.61) | 1657.82 (141.17) | 7977.35 (778.37) |
| NYK | 3049.22 (587.60) | 6870.47 (935.40) | 0.44 (0.04) | 402.20 (253.22) | 1146.12 (689.76) | 0.34 (0.04) | 1735.89 (354.50) | 645.24 (106.88) | 350.41 (75.19) | 1320.63 (196.82) | 1915.03 (264.70) | 7954.90 (1316.47) |
| OKC | 3277.12 (336.03) | 7065.94 (720.98) | 0.46 (0.02) | 404.45 (249.50) | 1144.38 (684.46) | 0.34 (0.05) | 1890.12 (229.24) | 716.70 (127.91) | 402.61 (75.30) | 1321.96 (188.37) | 1897.85 (231.22) | 8547.33 (746.25) |
| ORL | 3025.53 (342.34) | 6635.53 (675.45) | 0.46 (0.02) | 517.47 (220.96) | 1451.53 (590.67) | 0.35 (0.02) | 1751.17 (242.31) | 604.67 (71.86) | 384.23 (69.31) | 1220.67 (136.78) | 1715.90 (236.29) | 8054.97 (876.04) |
| PHI | 3124.44 (522.83) | 7012.01 (900.01) | 0.44 (0.04) | 327.20 (241.55) | 975.73 (681.18) | 0.32 (0.04) | 1796.84 (266.13) | 712.74 (86.02) | 444.24 (106.87) | 1374.85 (240.37) | 1866.73 (239.09) | 8253.84 (1171.70) |
| PHO | 3343.47 (335.39) | 7078.53 (628.76) | 0.47 (0.02) | 412.55 (267.35) | 1161.08 (704.60) | 0.33 (0.05) | 2019.41 (257.41) | 687.83 (120.12) | 395.65 (67.59) | 1358.43 (246.22) | 1864.35 (224.91) | 8687.27 (818.06) |
| POR | 3257.51 (384.89) | 6984.41 (701.97) | 0.47 (0.02) | 391.50 (258.22) | 1109.97 (684.08) | 0.33 (0.06) | 1914.29 (259.05) | 666.41 (118.46) | 403.39 (53.52) | 1323.61 (239.78) | 1849.53 (238.99) | 8471.57 (885.25) |
| SAC | 3157.23 (509.71) | 7019.83 (832.66) | 0.45 (0.03) | 373.48 (227.03) | 1053.67 (597.75) | 0.33 (0.05) | 1854.15 (272.21) | 672.85 (93.68) | 374.96 (65.05) | 1342.78 (197.03) | 1915.52 (252.62) | 8247.46 (1141.10) |
| SAS | 3306.92 (407.50) | 6968.52 (766.57) | 0.47 (0.02) | 321.49 (249.86) | 892.57 (628.14) | 0.33 (0.06) | 1915.98 (278.52) | 653.93 (110.40) | 463.37 (91.99) | 1306.88 (226.79) | 1813.58 (294.27) | 8592.27 (925.93) |
| TOR | 2958.46 (359.04) | 6568.75 (677.11) | 0.45 (0.02) | 550.17 (191.33) | 1524.00 (508.61) | 0.36 (0.02) | 1729.17 (227.96) | 606.25 (87.52) | 411.42 (91.87) | 1130.08 (143.40) | 1749.54 (178.95) | 7925.75 (984.27) |
| UTA | 3156.11 (344.55) | 6677.38 (670.47) | 0.47 (0.02) | 308.15 (233.35) | 880.75 (635.06) | 0.33 (0.04) | 1986.71 (247.32) | 670.29 (81.73) | 450.04 (101.36) | 1348.71 (204.85) | 1914.16 (215.83) | 8301.36 (771.99) |
| WAS | 3284.17 (356.45) | 7211.33 (768.70) | 0.46 (0.02) | 332.12 (242.25) | 972.02 (642.85) | 0.31 (0.06) | 1825.72 (237.61) | 647.72 (82.04) | 404.37 (84.29) | 1295.04 (182.54) | 1852.90 (181.92) | 8429.12 (810.86) |
Number of passes made each season per team:
Doesn’t look like there’s much here, but we’ll see.
Raw assist numbers by team and season:
I forgot about the lockout seasons in 1998 and 2011, so I’ll have to look at percentages or exclude those years. However, suggests that my data scraping function worked correctly, which is good because it took forever. It does look like there could be an overall sinusoid trend though, which is interesting.
Next, I plotted the percentage of baskets assisted. This time I also split the plot into individual teams:
These plots look a little bit flatter to me, but there could still be an up and down trend. It would be worth checking for at least a cubic effect of time. Two random interesting things that stood out to me are the assist trends for the Utah Jazz and Golden State Warriors:
Golden State has a sudden increase in assist percentage around 2012, which is close to when they began their dominant run. The numbers peak in 2016, when Stephen Curry was the unanimous MVP. In Utah, the percentage of assisted baskets is consistently high from about 1985 to the early 2000s, which corresponds with the career of John Stockton (the NBA’s all-time leader in assists).
Because line graphs can be messy and hard to read, I tried plotting using Loess smoothing as well:
These are a little messy still, but the up-then-down trend is pretty obvious in the league-wide plot.
I’m starting out with a very basic model, to see if overall passing has has changed since 2013. I wondered if it would be necessary to adjust for minutes played, given that you’d expect this to affect the number of passes. However, there was no association and models adjusting for minutes played were no better by AIC. So, the models below have a single fixed effect for season. I’m including a random intercept for team, but I’d like to check whether or not I should include an AR(1) structure for the repeated measures as well.
passing_mod <- lme(Passes.Made ~ Season, random = ~1|Team,
data = passing,method = "ML")
passing_mod_ar1 <- lme(Passes.Made ~ Season, random = ~1|Team,
data = passing,correlation = corAR1(),method = "ML")
The model with an AR(1) structure is better by AIC and the residuals look slightly better as well. There might be a sort of pattern in the standardized residuals for both models, but the AR(1) looks a little better.
| df | AIC | |
|---|---|---|
| passing_mod | 4 | 3159.781 |
| passing_mod_ar1 | 5 | 3120.225 |
I wanted to try a locally smoothed model as well (using the smallest span parameter that didn’t produce a warning):
passing_loess <- loess(Passes.Made ~ Season, data = passing, span = 0.51)
I think the AR(1) and Loess residuals look pretty comparable, and since I’m not sure how to interpret a Loess model, I think I’ll stick with the AR(1) model. Based on the AR(1) model (refit using REML), it appears that the number of passes made hasn’t changed significantly over time:
| term | estimate | std.error | statistic | p.value |
|---|---|---|---|---|
| (Intercept) | 12685.885285 | 170288.21261 | 0.0744966 | 0.9407152 |
| Season | 5.744868 | 84.48924 | 0.0679953 | 0.9458806 |
Since there could potentially be a cubic trend in the residuals by season, I tested up to a quartic polynomial as well:
| term | estimate | std.error | statistic | p.value |
|---|---|---|---|---|
| (Intercept) | 24349.98889 | 235.8347 | 103.2502444 | 0.0000000 |
| poly(Season, 4)1 | -40.36199 | 2004.5104 | -0.0201356 | 0.9839627 |
| poly(Season, 4)2 | -1941.54927 | 1404.4988 | -1.3823787 | 0.1689665 |
| poly(Season, 4)3 | 360.02024 | 1088.7414 | 0.3306756 | 0.7413636 |
| poly(Season, 4)4 | -465.82876 | 925.7304 | -0.5032013 | 0.6155811 |
Still nothing, so I think it’s safe to say that total passing rate hasn’t changed significantly since 2013.
Again, I’m starting out with a very basic model, to see if the percentage of baskets assisted has changed over time. This data goes all the way back to 1976, so there should be significantly more information than for raw passing numbers. This time I’d like to compare the spatial power correlation structure as well:
ast_mod <- lme(AST_perc ~ Season, random = ~1|Team,
data = all_seasons[all_seasons$Season > 1976,], method = "ML")
ast_mod_ar1 <- lme(AST_perc ~ Season, random = ~1|Team,
data = all_seasons[all_seasons$Season > 1976,],
method = "ML",correlation = corAR1())
ast_mod_car1 <- lme(AST_perc ~ Season, random = ~1|Team,
data = all_seasons[all_seasons$Season > 1976,],
method = "ML",correlation = corCAR1())
| df | AIC | |
|---|---|---|
| ast_mod | 4 | 6427.779 |
| ast_mod_ar1 | 5 | 5855.183 |
| ast_mod_car1 | 5 | 5855.183 |
The AR(1) structure and spatial power are better by AIC, so to keep things simple I’ll go with the AR(1) model. Now compare its residuals to the random intercept only model:
AR(1) residuals look a little bit better, but there still appears to be a pattern, so let’s test a model with up to a quartic polynomial for season:
ast_mod_ar1_poly <- lme(AST_perc ~ poly(Season,4), random = ~1|Team,
data = all_seasons[all_seasons$Season > 1976,],
method = "ML",correlation = corAR1())
| df | AIC | |
|---|---|---|
| ast_mod_ar1 | 5 | 5855.183 |
| ast_mod_ar1_poly | 8 | 5832.619 |
This is much better by AIC, so let’s look at the results (model re-fit with REML):
| term | estimate | std.error | statistic | p.value |
|---|---|---|---|---|
| (Intercept) | 59.43919 | 0.266882 | 222.717083 | 0.0000000 |
| poly(Season, 4)1 | -16.68293 | 7.535167 | -2.214009 | 0.0270301 |
| poly(Season, 4)2 | -24.11999 | 7.087531 | -3.403158 | 0.0006898 |
| poly(Season, 4)3 | 25.99649 | 6.265169 | 4.149368 | 0.0000359 |
| poly(Season, 4)4 | 12.53635 | 5.829033 | 2.150674 | 0.0317166 |
There appears to be a quartic trend for time in the percentage of baskets assisted!
There’s still a lot to do for this project, but I didn’t want this phase 2 report to get even longer than it already is. Next I’d like to test how the percentage of assisted baskets affects winning percentage. I know now that there’s a quartic affect of time on assist percentage, but need to look into additional covariates as well. Obviously offense is only half of the game, so I imagine I’ll need to adjust for team defensive statistics. Counting steals and blocks isn’t the ideal way to measure defense though, so I may need to get additional data on more advanced stats like defensive rating. But I think this is a good start!